package view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JComponent;
import util.ImagePanel;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableCellRenderer;
import model.ComandaDetalhe;
import util.ComandaDetalheTableModel;


/**
 *
 * @author Dick developer
 */
public class VendaView extends javax.swing.JFrame {
    
    private final JPanel imgPanel;
    private JPrincipal jp;
    private DecimalFormat df = new DecimalFormat("#,##0.00;-#,##0.00");
    private ComandaDetalheTableModel modelo;
    
    // <editor-fold defaultstate="collapsed" desc="Construtor">
    public VendaView(JPrincipal jp) {
        imgPanel = new ImagePanel( getClass().getResource("/images/fundotelasinvertido.png") );
        setContentPane(imgPanel);
        initComponents();
        //setExtendedState(MAXIMIZED_BOTH);
        this.jp = jp;
        teclasFuncoes(); 
        
        modelo = (ComandaDetalheTableModel) jtComandaDetalhe.getModel();
        abilitaDesabilita(true, false, false);
    }
    // </editor-fold> 
    
    // <editor-fold defaultstate="collapsed" desc="NetBeans">
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        panel = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jpCliente = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        tfComanda = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        tfCliente = new javax.swing.JTextField();
        jpVenda = new javax.swing.JPanel();
        tfProdutoCodigo = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        tfProdutoDescricao = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        tfProdutoVlrUnitario = new javax.swing.JTextField();
        tfProdutoQuantidade = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        tfProdutoVlrTotalItem = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();
        jpDetalhe = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jtComandaDetalhe = new javax.swing.JTable();
        jPanel6 = new javax.swing.JPanel();
        jlTotalComanda = new javax.swing.JLabel();
        jlTotalItens = new javax.swing.JLabel();
        jPanel7 = new javax.swing.JPanel();
        jLabel9 = new javax.swing.JLabel();

        jLabel1.setText("jLabel1");

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(800, 600));
        setUndecorated(true);

        panel.setOpaque(false);

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/btnFechar.PNG"))); // NOI18N
        jButton1.setBorderPainted(false);
        jButton1.setContentAreaFilled(false);
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jButton1MouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jButton1MouseExited(evt);
            }
        });
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addGap(0, 0, Short.MAX_VALUE)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 22, Short.MAX_VALUE)
        );

        jpCliente.setBorder(javax.swing.BorderFactory.createTitledBorder("Cliente"));
        jpCliente.setOpaque(false);

        jLabel2.setText("Comanda");

        tfComanda.setDocument(new util.NumberField(13));

        jLabel3.setText("Cliente");

        tfCliente.setEditable(false);

        javax.swing.GroupLayout jpClienteLayout = new javax.swing.GroupLayout(jpCliente);
        jpCliente.setLayout(jpClienteLayout);
        jpClienteLayout.setHorizontalGroup(
            jpClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jpClienteLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jpClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel2)
                    .addComponent(tfComanda, javax.swing.GroupLayout.PREFERRED_SIZE, 288, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jpClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jpClienteLayout.createSequentialGroup()
                        .addComponent(jLabel3)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addComponent(tfCliente))
                .addContainerGap())
        );
        jpClienteLayout.setVerticalGroup(
            jpClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jpClienteLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jpClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jLabel3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jpClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(tfComanda, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfCliente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jpVenda.setBorder(javax.swing.BorderFactory.createTitledBorder("Venda"));
        jpVenda.setOpaque(false);

        tfProdutoCodigo.setDocument(new util.NumberField(13));

        jLabel4.setText("Código");

        tfProdutoDescricao.setEditable(false);

        jLabel5.setText("Descrição");

        jLabel6.setText("Vlr. Unitário");

        tfProdutoVlrUnitario.setEditable(false);

        tfProdutoQuantidade.setDocument(new util.NumberField(3));

        jLabel7.setText("Quantidade");

        tfProdutoVlrTotalItem.setEditable(false);

        jLabel8.setText("Vlr. Total do Item");

        javax.swing.GroupLayout jpVendaLayout = new javax.swing.GroupLayout(jpVenda);
        jpVenda.setLayout(jpVendaLayout);
        jpVendaLayout.setHorizontalGroup(
            jpVendaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jpVendaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jpVendaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(tfProdutoCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 149, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel4))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jpVendaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(tfProdutoDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, 243, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel5))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jpVendaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(tfProdutoVlrUnitario, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel6))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jpVendaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(tfProdutoQuantidade, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel7))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jpVendaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel8)
                    .addComponent(tfProdutoVlrTotalItem, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(0, 190, Short.MAX_VALUE))
        );
        jpVendaLayout.setVerticalGroup(
            jpVendaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jpVendaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jpVendaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jLabel5)
                    .addComponent(jLabel6)
                    .addComponent(jLabel7)
                    .addComponent(jLabel8))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jpVendaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tfProdutoCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfProdutoDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfProdutoVlrUnitario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfProdutoQuantidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfProdutoVlrTotalItem, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jpDetalhe.setOpaque(false);

        jScrollPane1.setOpaque(false);

        jtComandaDetalhe.setModel(new util.ComandaDetalheTableModel());
        jtComandaDetalhe.setOpaque(false);
        jScrollPane1.setViewportView(jtComandaDetalhe);

        javax.swing.GroupLayout jpDetalheLayout = new javax.swing.GroupLayout(jpDetalhe);
        jpDetalhe.setLayout(jpDetalheLayout);
        jpDetalheLayout.setHorizontalGroup(
            jpDetalheLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1)
        );
        jpDetalheLayout.setVerticalGroup(
            jpDetalheLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 166, Short.MAX_VALUE)
        );

        jPanel6.setOpaque(false);

        jlTotalComanda.setFont(new java.awt.Font("Tahoma", 1, 36)); // NOI18N
        jlTotalComanda.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jlTotalComanda.setText("0,00");
        jlTotalComanda.setBorder(javax.swing.BorderFactory.createTitledBorder("Total da Comanda"));

        jlTotalItens.setFont(new java.awt.Font("Tahoma", 1, 36)); // NOI18N
        jlTotalItens.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jlTotalItens.setText("0");
        jlTotalItens.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Itens", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, new java.awt.Color(0, 0, 0)));

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel6Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jlTotalItens, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jlTotalComanda, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jlTotalComanda)
                    .addComponent(jlTotalItens))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder("Funções"));
        jPanel7.setOpaque(false);

        jLabel9.setText("F2-Finaliza Venda");

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel7Layout.setVerticalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel9)
                .addContainerGap(15, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(panel);
        panel.setLayout(panelLayout);
        panelLayout.setHorizontalGroup(
            panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jpVenda, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jpCliente, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jpDetalhe, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
            .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        panelLayout.setVerticalGroup(
            panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelLayout.createSequentialGroup()
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jpCliente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(5, 5, 5)
                .addComponent(jpVenda, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jpDetalhe, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(panel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
        setLocationRelativeTo(null);
    }// </editor-fold>//GEN-END:initComponents
    
    private void jButton1MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton1MouseExited
        jButton1.setSize(50,22);
    }//GEN-LAST:event_jButton1MouseExited

    private void jButton1MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton1MouseEntered
        jButton1.setSize(55,25);
    }//GEN-LAST:event_jButton1MouseEntered

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        jp.restaurar(jp);      
        this.hide();
    }//GEN-LAST:event_jButton1ActionPerformed
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel jlTotalComanda;
    private javax.swing.JLabel jlTotalItens;
    private javax.swing.JPanel jpCliente;
    private javax.swing.JPanel jpDetalhe;
    private javax.swing.JPanel jpVenda;
    private javax.swing.JTable jtComandaDetalhe;
    private javax.swing.JPanel panel;
    private javax.swing.JTextField tfCliente;
    private javax.swing.JTextField tfComanda;
    private javax.swing.JTextField tfProdutoCodigo;
    private javax.swing.JTextField tfProdutoDescricao;
    private javax.swing.JTextField tfProdutoQuantidade;
    private javax.swing.JTextField tfProdutoVlrTotalItem;
    private javax.swing.JTextField tfProdutoVlrUnitario;
    // End of variables declaration//GEN-END:variables
    // </editor-fold> 
    
    // <editor-fold defaultstate="collapsed" desc="addEvento">
    public void addTfComandaActionListener(ActionListener l){ 
        tfComanda.addActionListener(l); 
        tfComanda.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                tfProdutoCodigo.grabFocus();
            }
        });
    } 
    public void addTfProdutoCodigoActionListener(ActionListener l){ 
        tfProdutoCodigo.addActionListener(l); 
        tfProdutoCodigo.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                tfProdutoQuantidade.grabFocus();
            }
        });
    } 
    public void addTfProdutoQuantidadeActionListener(ActionListener l){ 
        tfProdutoQuantidade.addActionListener(l); 
        tfProdutoQuantidade.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                tfProdutoCodigo.grabFocus();
            }
        });
    }   
    public void addTfProdutoQuantidadeKeyListener(KeyAdapter evt){ tfProdutoQuantidade.addKeyListener(evt); }   
    public void addTableModelListener(TableModelListener tml){ modelo.addTableModelListener(tml); }    
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Getter e Setter">
    public String getTfCliente() {
        return tfCliente.getText();
    }

    public void setTfCliente(String cliente) {
        this.tfCliente.setText(cliente);
    }

    public String getTfComanda() {
        return tfComanda.getText();
    }

    public void setTfComanda(String comanda) {
        this.tfComanda.setText(comanda);
    }
    
    public String getTfProdutoCodigo() {
        return tfProdutoCodigo.getText();
    }

    public void setTfProdutoCodigo(String produtoCodigo) {
        this.tfProdutoCodigo.setText(produtoCodigo);
    }
    
    public String getTfProdutoDescricao() {
        return tfProdutoDescricao.getText();
    }

    public void setTfProdutoDescricao(String produtoDescricao) {
        this.tfProdutoDescricao.setText(produtoDescricao);
    }

    public String getTfProdutoVlrTotalItem() {
        return tfProdutoVlrTotalItem.getText();
    }

    public void setTfProdutoVlrTotalItem(String produtoVlrTotalItem) {
        this.tfProdutoVlrTotalItem.setText(produtoVlrTotalItem);
    }

    public String getTfProdutoVlrUnitario() {
        return tfProdutoVlrUnitario.getText();
    }

    public void setTfProdutoVlrUnitario(BigDecimal produtoVlrUnitario) {
        this.tfProdutoVlrUnitario.setText(df.format( produtoVlrUnitario));
    }
    
    public String getTfProdutoQuantidade() {
        return tfProdutoQuantidade.getText();
    }

    public void setTfProdutoQuantidade(String quantidade) {
        this.tfProdutoQuantidade.setText(quantidade);
    }

    public ComandaDetalheTableModel getModelo() {
        return modelo;
    }

    public String getJlTotalComanda() {
        return jlTotalComanda.getText();
    }

    public void setJlTotalComanda(String totalComanda) {
        this.jlTotalComanda.setText(totalComanda);
    }

    public String getJlTotalItens() {
        return jlTotalItens.getText();
    }

    public void setJlTotalItens(String totalItens) {
        this.jlTotalItens.setText(totalItens);
    }
    
    
     // </editor-fold>
    
    public void preencheDetalheTableModel(List<ComandaDetalhe> lista) {        
        
        ComandaDetalheTableModel detalheTableModel =  (ComandaDetalheTableModel) jtComandaDetalhe.getModel();
        
        DefaultTableCellRenderer direita = new DefaultTableCellRenderer();
        direita.setHorizontalAlignment(SwingConstants.RIGHT);

        jtComandaDetalhe.getColumnModel().getColumn(2).setCellRenderer(direita);
        jtComandaDetalhe.getColumnModel().getColumn(3).setCellRenderer(direita);
        jtComandaDetalhe.getColumnModel().getColumn(4).setCellRenderer(direita);
                
        detalheTableModel.clearRows();
        BigDecimal totalVenda = new BigDecimal(0.00);
        Integer itens = 0;
        for (ComandaDetalhe detalhe : lista) {
            detalheTableModel.addRow(detalhe);
            totalVenda = totalVenda.add( detalhe.getProduto().getVlrVenda().multiply( new BigDecimal(detalhe.getQuantidade())) );
            itens += detalhe.getQuantidade();
        }
        jlTotalItens.setText(itens.toString());        
        jlTotalComanda.setText(df.format(totalVenda));
    }
    
    private void finalizaVenda(){
        abilitaDesabilita(true, false, false);        
        preencheDetalheTableModel(new ArrayList<ComandaDetalhe>());
        tfComanda.setText("");
        tfComanda.grabFocus();
        tfCliente.setText("");
        tfProdutoCodigo.setText("");
        tfProdutoDescricao.setText("");
        tfProdutoVlrUnitario.setText("");
        tfProdutoQuantidade.setText("");
        tfProdutoVlrTotalItem.setText("");
    }
    
    // <editor-fold defaultstate="collapsed" desc="Teclas de Funções">
    private void teclasFuncoes() {
        //1) Pegue o input map do painel onde os componentes estão: 
        InputMap imap = panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);  
        //2) Adicione a esse input map, a tecla que será pressionada e o nome da 
        //   ação que essa tecla dispara. Esse nome da ação é escolhido livremente 
        //   por você e deve ser único para cada ação: 
        imap.put(KeyStroke.getKeyStroke("F2"), "panel.buttonF2press"); 
        
        // Obtenha o ActionMap do seu painel onde os componentes estão: 
        ActionMap amap = panel.getActionMap();     
        //Mapeie os nomes de ação (aqueles, fornecidos na string ali de cima), 
        //para as ações em si: 
        amap.put("panel.buttonF2press", new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                finalizaVenda();
            }
        });        
        
    }
    // </editor-fold> 

    public void abilitaDesabilita(boolean comanda, boolean codigo, boolean quantidade) {
        tfComanda.setEnabled(comanda);
        tfProdutoCodigo.setEnabled(codigo);
        tfProdutoQuantidade.setEnabled(quantidade);
    }
}
